package com.gome.han.bigdata.spark.core.rdd.operation.transformation

import org.apache.spark.rdd.RDD
import org.apache.spark.{SparkConf, SparkContext}

/**
 * @author Hanpeng
 * @date 2021/1/13 21:11
 * @description:
 *              适用于分区里面的数据很小的情况
 *              比如有两个分区 A,B.
 *              合并成一个分区交给一个executor 执行。
 */
object CoalesceOperation {
  def main(args: Array[String]): Unit = {
    val sparkConf = new SparkConf().setMaster("local[*]").setAppName("Operator")
    val sc = new SparkContext(sparkConf)

    // TODO 算子 - coalesce
    val rdd = sc.makeRDD(List(1,2,3,4,5,6), 3)

    // coalesce方法默认情况下不会将分区的数据打乱重新组合
    // 这种情况下的缩减分区可能会导致数据不均衡，出现数据倾斜
    // 如果想要让数据均衡，可以进行shuffle处理
    //API要详细查看
    val newRDD: RDD[Int] = rdd.coalesce(2)
    //这两个要进行一个对比shuffle=true
    //val newRDD: RDD[Int] = rdd.coalesce(2,true)

    newRDD.saveAsTextFile("output")




    sc.stop()
  }
}
